//
//  fraction.h
//  linear_algebra
//
//  Created by zhangnan on 2025/3/31.
//

#ifndef fraction_h
#define fraction_h

#include <stdio.h>


// 定义分数结构体
typedef struct{
    int numerator;   // 分子
    int denominator; // 分母
} FRACTION_TYPE;

// 释放分数对象所占用的内存
void free_fraction(FRACTION_TYPE *f);

// 创建一个新的分数对象，并分配内存
// 参数a: 分子
// 参数b: 分母
// 返回值: 指向新创建的分数对象的指针
FRACTION_TYPE *new_fraction(int a,int b);

// 创建一个新的简化分数对象，并分配内存
// 参数a: 分子，分母默认为1
// 返回值: 指向新创建的简化分数对象的指针
FRACTION_TYPE *new_simple_fraction(int a);

// 简化分数
// 参数f: 需要简化的分数指针
// 返回值: 指向简化后的分数对象的指针
FRACTION_TYPE *simplify(FRACTION_TYPE *f);

// 分数加法
// 参数f1: 第一个分数
// 参数f2: 第二个分数
// 返回值: 指向两个分数相加结果的分数对象的指针
FRACTION_TYPE* add_fractions(FRACTION_TYPE *f1, FRACTION_TYPE *f2);

// 分数减法
// 参数f1: 第一个分数
// 参数f2: 第二个分数
// 返回值: 指向两个分数相减结果的分数对象的指针
FRACTION_TYPE* sub_fractions(FRACTION_TYPE *f1, FRACTION_TYPE *f2);

// 分数乘法
// 参数f1: 第一个分数
// 参数f2: 第二个分数
// 返回值: 指向两个分数相乘结果的分数对象的指针
FRACTION_TYPE* multi_fractions(FRACTION_TYPE *f1, FRACTION_TYPE *f2);

// 分数除法
// 参数f1: 第一个分数
// 参数f2: 第二个分数
// 返回值: 指向两个分数相除结果的分数对象的指针
FRACTION_TYPE* divide_fractions(FRACTION_TYPE *f1, FRACTION_TYPE *f2);

#endif /* fraction_h */
